import keyword
import re

class PythonKeywordTranslator:
    """
    Python关键字转中文工具
    将Python代码中的关键字替换为中文，同时保持代码的语法正确性
    """
    
    def __init__(self):
        """初始化翻译器，加载关键字映射表"""
        self.keyword_map = self._load_keyword_map()
        self.reversed_map = {v: k for k, v in self.keyword_map.items()}
        
        # 创建关键字匹配正则表达式（匹配整个单词）
        keyword_pattern = '|'.join(keyword.kwlist)
        self.keyword_regex = re.compile(r'\b(' + keyword_pattern + r')\b')
        
        # 创建中文关键字匹配正则表达式
        chinese_keywords = '|'.join(self.keyword_map.values())
        self.chinese_keyword_regex = re.compile(r'\b(' + chinese_keywords + r')\b')
    
    def _load_keyword_map(self):
        """加载Python关键字到中文的映射表"""
        return {
            # 控制流
            'if': '如果',
            'else': '否则',
            'elif': '否则如果',
            'for': '循环',
            'while': '当',
            'break': '中断',
            'continue': '继续',
            'pass': '跳过',
            
            # 函数定义
            'def': '定义函数',
            'return': '返回',
            'yield': '生成',
            
            # 类定义
            'class': '类',
            'self': '自身',
            'super': '父类',
            
            # 导入
            'import': '导入',
            'from': '从',
            'as': '作为',
            
            # 异常处理
            'try': '尝试',
            'except': '捕获',
            'finally': '最终',
            'raise': '抛出',
            'assert': '断言',
            
            # 逻辑运算
            'and': '与',
            'or': '或',
            'not': '非',
            
            # 其他
            'in': '在',
            'is': '是',
            'lambda': '匿名函数',
            'with': '使用',
            'del': '删除',
            'global': '全局',
            'nonlocal': '非局部',
            'None': '空',
            'True': '真',
            'False': '假',
            
            # Python 3.6+ 新增关键字
            'async': '异步',
            'await': '等待'
        }
    
    def translate_code(self, code, to_chinese=True):
        """
        将Python代码中的关键字翻译成中文或还原
        
        参数:
        code (str): 要翻译的Python代码
        to_chinese (bool): True表示翻译成中文，False表示还原为英文
        
        返回:
        str: 翻译后的代码
        """
        if to_chinese:
            # 将英文关键字替换为中文
            def replace_keyword(match):
                keyword = match.group(1)
                return self.keyword_map.get(keyword, keyword)
            
            return self.keyword_regex.sub(replace_keyword, code)
        else:
            # 将中文关键字还原为英文
            def replace_chinese_keyword(match):
                chinese_keyword = match.group(1)
                return self.reversed_map.get(chinese_keyword, chinese_keyword)
            
            return self.chinese_keyword_regex.sub(replace_chinese_keyword, code)
    
    def translate_file(self, input_file, output_file, to_chinese=True):
        """
        翻译文件中的Python代码
        
        参数:
        input_file (str): 输入文件路径
        output_file (str): 输出文件路径
        to_chinese (bool): True表示翻译成中文，False表示还原为英文
        """
        try:
            with open(input_file, 'r', encoding='utf-8') as f:
                code = f.read()
            
            translated_code = self.translate_code(code, to_chinese)
            
            with open(output_file, 'w', encoding='utf-8') as f:
                f.write(translated_code)
            
            print(f"文件翻译成功！已保存到: {output_file}")
            return True
            
        except FileNotFoundError:
            print(f"错误: 文件 {input_file} 不存在")
            return False
        except Exception as e:
            print(f"翻译文件时发生错误: {e}")
            return False
    
    def is_valid_python_code(self, code):
        """
        检查代码是否是有效的Python代码
        
        参数:
        code (str): 要检查的代码
        
        返回:
        tuple: (is_valid, error_message)
        """
        try:
            # 尝试编译代码以检查语法
            compile(code, '<string>', 'exec')
            return (True, "代码语法正确")
        except SyntaxError as e:
            return (False, f"语法错误: {e}")
        except Exception as e:
            return (False, f"其他错误: {e}")
    
    def show_keyword_mapping(self):
        """显示所有关键字映射关系"""
        print("Python关键字中文映射表:")
        print("-" * 40)
        for eng, chn in sorted(self.keyword_map.items()):
            print(f"{eng:<12} -> {chn}")
        print("-" * 40)
        print(f"共 {len(self.keyword_map)} 个关键字")

def main():
    """主函数，提供命令行交互界面"""
    translator = PythonKeywordTranslator()
    
    print("=" * 50)
    print("Python关键字中文翻译器")
    print("=" * 50)
    print("功能: 将Python代码中的关键字替换为中文或还原")
    print()
    
    while True:
        print("请选择操作:")
        print("1. 翻译代码片段")
        print("2. 翻译文件")
        print("3. 显示关键字映射表")
        print("4. 退出")
        print()
        
        choice = input("请输入选项 (1-4): ")
        
        if choice == '1':
            print("\n--- 翻译代码片段 ---")
            print("请输入Python代码（输入空行结束）:")
            code_lines = []
            while True:
                line = input()
                if not line:
                    break
                code_lines.append(line)
            code = '\n'.join(code_lines)
            
            if not code:
                print("错误: 未输入任何代码")
                continue
            
            direction = input("翻译方向 (1=英文→中文, 2=中文→英文): ")
            to_chinese = direction == '1'
            
            translated_code = translator.translate_code(code, to_chinese)
            print("\n翻译结果:")
            print("-" * 30)
            print(translated_code)
            print("-" * 30)
            
            # 检查翻译后的代码是否有效
            is_valid, message = translator.is_valid_python_code(
                translator.translate_code(translated_code, not to_chinese)
            )
            print(f"代码有效性: {message}")
            print()
        
        elif choice == '2':
            print("\n--- 翻译文件 ---")
            input_file = input("请输入输入文件路径: ")
            output_file = input("请输入输出文件路径: ")
            
            direction = input("翻译方向 (1=英文→中文, 2=中文→英文): ")
            to_chinese = direction == '1'
            
            translator.translate_file(input_file, output_file, to_chinese)
            print()
        
        elif choice == '3':
            print("\n--- 关键字映射表 ---")
            translator.show_keyword_mapping()
            print()
        
        elif choice == '4':
            print("感谢使用，再见！")
            break
        
        else:
            print("无效的选项，请重新输入")
            print()

if __name__ == "__main__":
    main()
1
